三不五時就會聽到有人問要如何備份印表機伺服器內容裡的自訂紙張規格,很多人都說可以使用微軟出品的Printmig 印表機管理程式,原來以為這個小工具可以備份紙張設定,實際操作卻不然,不知是我不會還是真的不行,希望有以這個管理工具備份紙張成功的邦友也來分享一下,
實際操作時會發現選單裡屬於功能面的只有四個,本機,遠端,備份,還原,項目清單裡也沒有關紙張設定的清單附圖
也因為三不五時會用到備份及還原紙張設定,所以就自己做了一個方便使用。
使用方式將以下批次內容存成.bat檔,要執行時先進入MSDOS輸入CMD.EXE /V 在輸入.BAT檔名,可加參數,說明可參考.BAT內容說明
@ECHO OFF
setlocal ENABLEDELAYEDEXPANSION
c:
cd \
REM 計數器
SET C2=%1
REM 目前狀態 1備份 2還原
SET F1=1
REM 文字 還原或備份
SET F2=備份
REM 快速鍵 還原A 備份B
SET F3=A
REM 切換用選單 備份MENUA0 還原MENUB0
SET F4=MENUA0
REM 目前現用程式 備份BACK 還原ADD
SET F5=BACK
REM 目前現用選單 備份MENUA1 還原MENUB1
SET F6=MENUA1
set REG=reg query hklm\SYSTEM\CurrentControlSet\Control\Print\Forms /s
set QUERY=REG QUERY HKLM\SYSTEM\CurrentControlSet\Control\Print\Forms /v
SET REREG=REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Print\Forms /T REG_BINARY /F /V
set FileName=%temp%\PaperSize.txt
set BKF=Back.cpz
:CHECK
IF "%F1%"=="1" (
SET F1=2
SET F2=還原
SET F3=A
SET F4=MENUB0
SET F5=BACK
SET F6=MENUA1
SET F7=備份
) ELSE (
SET F1=1
SET F2=備份
SET F3=B
SET F4=MENUA0
SET F5=ADD
SET F6=MENUB1
SET F7=還原 )
GOTO %F5%
:MENUA0
GOTO CHECK
:BACK
SET C1=
DEL %FileName% 2>NUL
CLS
SET T=
cls
FOR /F "skip=4 tokens=1 delims=_" %%A in ('%REG%') do (
SET /A C1=!C1!+1
SET T=%%A
ECHO !C1!:!T:~4,-4!
)>>%FileName%
findstr "." %FileName% |more
GOTO LOOP
:MENUA1
for %%I IN (%NUM%) DO (
FOR /F "tokens=2* delims=:" %%A in ('FINDSTR /B "%%I:" %%FileName%%') do (
FOR /F "skip=4 tokens=1* delims=_" %%B in ('%QUERY% "%%A"') do (
SET /A C2=!C2!+1
SET T=%%B
SET T2=%%C
ECHO !C2!:!T:~4,-4!=!T2:~-64!
)>>%BKF%
ECHO 正在備份 %%A 紙張規格中 ...))
GOTO Message
GOTO %F5%
:MENUB0
GOTO CHECK
:ADD
IF NOT EXIST %BKF% (
CLS
ECHO.
ECHO.
ECHO.
ECHO 找不到備份檔,請將先前制作的備份檔放至與本檔案同一目錄中.
ECHO. 注意:DOS 不支援UNC路徑
ECHO 按任一鍵離開.
PAUSE >NUL
GOTO BYE
)
DEL %FileName% 2>NUL
CLS
FOR /F "tokens=1* delims==" %%A in ('FINDSTR "=" %%BKF%%') do ECHO %%A >> %FileName%
TYPE %FileName%|MORE
GOTO LOOP
:MENUB1
for %%I IN (%NUM%) DO (
FOR /F "tokens=1,2* delims=:,=" %%A in ('FINDSTR /B "%%I:" %BKF%') do (
%REREG% "%%B" /D %%C 1>NUL
ECHO 正在還原 %%B 設定值... ))
ECHO 快好了,再等一會兒.
sc stop Spooler 1>NUL
sc start Spooler 1>NUL
GOTO Message
GOTO %F5%
:ERR
CLS
ECHO 編號輸入有誤,請檢查
ECHO [ %NUM% ]
ECHO.
ECHO 請按任一鍵回到列表
PAUSE >NUL
GOTO %F5%
:Message
ECHO.
ECHO %F7% Done.
ECHO 請按任一鍵回前畫面
PAUSE >NUL
GOTO %F5%
:LOOP
echo 查看編號輸入 [M] 離開BPS按[Q] 查看說明按[?] 功能切換[%F3%]
ECHO 輸入編號原則:1 2 3 4 5 6.....N 各編號中間空一格
ECHO [ %F2% ] 紙張設定請輸入 [%F3%] 回到另一個選單
echo 請輸入要[%F7%]的紙張編號:
ECHO 狀態:[%F7%]
set /P NUM=
IF "%NUM%"=="?" GOTO HELP
IF "%NUM%"=="%F3%" GOTO %F4%
IF "%NUM%"=="M" GOTO %F5%
IF "%NUM%"=="Q" GOTO BYE
for %%I IN (%NUM%) DO ( IF /I %%I LEQ 0 (GOTO ERR ) ELSE (IF /I %%I GTR 10000 (GOTO ERR )))
GOTO %F6%
:HELP
CLS
ECHO.
ECHO ===============說 明===============
ECHO.
ECHO 這是備份印表機伺服器內容裡的自訂紙張格式小程式
ECHO 操作方式
ECHO 程式一開始會先將印表機紙張格式資料帶出畫面,在每一行的前面有編號,這個
ECHO 編號就是後續要備份或還原時所需的編號。
ECHO 切換至 備份/還原 :輸入A按ENTER為還原操作介面,輸內B為備份操作介面。
ECHO 畫面重讀:輸入M按ENTER可重新讀取編號。
ECHO 離開:輸入Q按ENTER可離開操作介面。
ECHO 輸入編號原則為1 2 3 4 5 6.....N 各編號中間空一格,只能輸入小寫數字。
ECHO.
ECHO 注意事項
ECHO 1.建立新的紙張格式時不可包含特殊符號,只能使用空格及A-Z,a-z,0-9,文字.
ECHO 2.必需要有登錄檔的寫入權限才可操作.
ECHO 3.還原時需將備份檔%BKF%放到與本檔同一個目錄.
ECHO 4.DOS 不支援UNC路徑,所以這個檔案無法放在網路芳鄰上執行.
ECHO 5.檔份檔內相同編號只取第一個找到的編號.
ECHO 6.使用這個檔案時需啟用CMD.EXE /V 參數
ECHO 7.要在原有備份檔新增新的資料時需在執行這個BAT時加入N+1的數字.
ECHO 例:原有60筆應輸入BPS.BAT 61 如果沒輸入參數會造成重複的編號.
ECHO 作者:Dreamer dreamer@mail.DingerBS.com
ECHO HTTP://www.DingerBS.com
ECHO.
ECHO 按任一鍵回到上一個畫面......
PAUSE >NUL
GOTO %F5%
:BYE
FOR %%J IN (F1 F2 F3 F4 F5 F6 F7 F8 T T2 NUM C2 BKF) DO SET %%J=
CLS
ECHO.
ECHO.
ECHO Good Bye.
覺得對系統管理者來說 是個不錯的工具
但是我在win2000環境下測試執行後,為什麼會出現下列的訊息呢?
找不到備份檔,請將先前制作的備份檔放至與本檔案同一目錄中。
注意:DOS 不支援UNC路徑
按任一鍵離開
請前輩指點
謝謝
已有修改提示訊息,這樣可以更容易了解是少了什麼檔案。
另外計數器也有修改了。
windows 2k 我記得應該不支援for /f參數,所以...還是會不能用
如果是第一次使用這個檔應該是不會有備份檔的存在,需要先做一次備份或在同一目錄下建立一個名為Back.cpz的檔案,建立空白的檔案無法只能用於進入還原功能並無實質用途,因為檔案是空的會沒有資料可還原。
在有自訂印表機紙張的電腦上匯出下列機碼值,然後匯入到另一台電腦即可將印表機所有的紙張一併匯入(包含自訂的印表機紙張)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Forms
真是利害被你一眼就看出是使用這個方法,
會做得自動化主要用在大量的紙張規格及需求不同的電腦或客戶(可選式的備份及還原),還有就是沒有系統管理基礎的人找不到如何重啟印表機服務,還得講解半天